WebClient হলো Spring WebFlux-এর একটি অংশ, যা Spring Framework 5.0-এ প্রবর্তিত হয়। এটি Spring Boot অ্যাপ্লিকেশনে asynchronous এবং non-blocking HTTP কল করার জন্য ব্যবহার করা হয়। WebClient RestTemplate
-এর একটি আধুনিক বিকল্প এবং এটি রিয়্যাক্টিভ প্রোগ্রামিং এর ধারণা অনুসরণ করে।
আপনার pom.xml
ফাইলে নিচের ডিপেন্ডেন্সি যোগ করুন:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
WebClient-এর জন্য একটি Bean তৈরি করতে পারেন:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.function.client.WebClient;
@Configuration
public class WebClientConfig {
@Bean
public WebClient.Builder webClientBuilder() {
return WebClient.builder();
}
}
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;
@Service
public class UserClient {
private final WebClient webClient;
public UserClient(WebClient.Builder webClientBuilder) {
this.webClient = webClientBuilder.baseUrl("https://jsonplaceholder.typicode.com").build();
}
public Mono<String> getUserDetails() {
return webClient.get()
.uri("/users/1")
.retrieve()
.bodyToMono(String.class);
}
}
ব্যাখ্যা:
retrieve()
: রেসপন্স রিসিভ করে।bodyToMono(String.class)
: রেসপন্সকে Mono
টাইপে রূপান্তর করে, যা একক ডেটা ধারণ করে।ক্লায়েন্ট কল করার সময়:
userClient.getUserDetails().subscribe(System.out::println);
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;
@Service
public class UserClient {
private final WebClient webClient;
public UserClient(WebClient.Builder webClientBuilder) {
this.webClient = webClientBuilder.baseUrl("https://jsonplaceholder.typicode.com").build();
}
public Mono<String> createUser(String name, String email) {
return webClient.post()
.uri("/users")
.bodyValue(new User(name, email))
.retrieve()
.bodyToMono(String.class);
}
}
ব্যবহার:
userClient.createUser("John Doe", "johndoe@example.com")
.subscribe(System.out::println);
WebClient-এর রেসপন্সে ত্রুটি হ্যান্ডেল করার জন্য .onStatus()
ব্যবহার করা হয়।
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;
@Service
public class UserClient {
private final WebClient webClient;
public UserClient(WebClient.Builder webClientBuilder) {
this.webClient = webClientBuilder.baseUrl("https://api.example.com").build();
}
public Mono<String> getUserDetailsWithErrorHandling() {
return webClient.get()
.uri("/users/1")
.retrieve()
.onStatus(
status -> status.is4xxClientError(),
response -> Mono.error(new RuntimeException("Client Error"))
)
.onStatus(
status -> status.is5xxServerError(),
response -> Mono.error(new RuntimeException("Server Error"))
)
.bodyToMono(String.class);
}
}
public Mono<String> getUserDetailsWithHeaders() {
return webClient.get()
.uri("/users/1")
.header("Authorization", "Bearer token_value")
.retrieve()
.bodyToMono(String.class);
}
import java.time.Duration;
public Mono<String> getUserDetailsWithTimeout() {
return webClient.get()
.uri("/users/1")
.retrieve()
.bodyToMono(String.class)
.timeout(Duration.ofSeconds(5));
}
WebClient Mono এবং Flux ব্যবহার করে কাজ করে:
Mono<String>
Flux<String>
বৈশিষ্ট্য | WebClient | RestTemplate |
---|---|---|
Concurrency | Non-blocking, Asynchronous | Blocking, Synchronous |
Performance | উচ্চতর (Reactive Streams) | তুলনামূলক ধীর |
Reactive Support | Reactive Programming সমর্থিত | সমর্থন করে না |
Preferred For | High-performance, Microservices | Traditional, Simple HTTP Calls |
WebClient Spring Boot অ্যাপ্লিকেশনে REST API কল করার জন্য একটি আধুনিক, শক্তিশালী এবং উচ্চ কার্যক্ষম টুল। এটি বিশেষ করে রিয়্যাক্টিভ প্রোগ্রামিং এবং মাইক্রোসার্ভিস আর্কিটেকচারের জন্য উপযোগী। Asynchronous এবং Non-blocking বৈশিষ্ট্যের কারণে এটি পারফরমেন্স বৃদ্ধির ক্ষেত্রে খুবই কার্যকর।
Read more